What is the difference between primitive and reference types